
let CoordinationWss;
mc.listen("onServerStarted", ()=>{
    // [API导入] 导入WS协调服务端Api
    try {
        CoordinationWss = {
            registerListenerCall: ll.import('CoordinationWss', 'registerListenerCall'),
            sendJson: ll.import('CoordinationWss', 'sendJson'),
            broadcastData: ll.import('CoordinationWss', 'broadcastData'),
            sendServerLogger: ll.import('CoordinationWss', 'sendServerLogger'),
        };
    }catch(e){
        logger.warn('导入CoordinationWss函数失败');
    }

    // [API使用] 发送json消息到协调服务端
    CoordinationWss.sendJson({
        header: {
            url: undefined,
            messagePurpose: 'commandResponse',
            requestId: undefined,
            version: 17039360,
        },
        body: {
            data: {},
            // victim: undefined,
            // userType: 'server',
            // position: undefined,
            statusCode: 0,
            statusMessage: ""
        }
    });

    let count = 0;
    setInterval(()=>{
      count++;
      // [API使用] 广播数据到协调服务端
      CoordinationWss.broadcastData({
        plugin: "CoordinationWscApi",
        purpose: "test",
        content: "data-" + count
      });
    }, 5000);

    // 注册监听及回调-监听协调服务端json消息(先导出后注册)
    CoordinationWss.registerListenerCall('jsonMessage', 'otherPlugin', 'onJsonMessage');
    // 注册监听及回调-协调服务端chat事件(先导出后注册)
    CoordinationWss.registerListenerCall('chat', 'otherPlugin', 'onChat');
    // 注册监听及回调-监听协调服务端data事件(先导出后注册)
    CoordinationWss.registerListenerCall('data', 'otherPlugin', 'onData');
});

// json消息处理
ll.exports(onJsonMessage, 'otherPlugin', 'onJsonMessage');
function onJsonMessage(dataPack){
    log('[协调服务端API][监听json消息] 长度: '+(calculateUtf8ByteSize(JSON.stringify(dataPack.body.data))/1024).toFixed(2)+'KB');
}

// chat事件处理
ll.exports(onChat, 'otherPlugin', 'onChat');
function onChat(dataPack){
    let {sender, msg, serverName, time} = dataPack.body.data;
    log('[协调服务端API][监听chat消息] ', `<${sender}> ${msg}`);
}

// data事件处理
ll.exports(onData, 'otherPlugin', 'onData');
function onData(dataPack){
    log('[协调服务端API][监听data消息] ', JSON.stringify(dataPack.body.data, undefined, 4));
}


// 计算字符串字节数
function calculateUtf8ByteSize(str) {
    // 非字符串 不作计算
    if (typeof str !== 'string') return;
    // 定义变量，用于累加字节数
    let byteCount = 0;
    // 遍历字符串中的每个字符
    for (let i = 0, len = str.length; i < len; i++) {
      // 获取当前字符的Unicode码
      const charCode = str.charCodeAt(i);
      // 根据字符的Unicode码，计算其占用的字节数
      if (charCode <= 0x007F) {
        byteCount += 1; // 在000000-00007F之间的字符(如字母)，占用1个字节
      } else if (charCode <= 0x07FF) {
        byteCount += 2; // 在000080-0007FF之间的字符(如中文)，占用2个字节
      } else if (charCode <= 0xFFFF) {
        byteCount += 3; // 000800-00FFFF之间的字符(如中文)，占用3个字节
      } else if (charCode <= 0x10FFFF){
        byteCount += 4; // 010000-10FFFF之间的字符(如表情)，占用4个字节
      } else {
        console.log('该字符超出Unicode编码范围');
      }
    }
    return byteCount;
}